﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaLogica.CL.Usuario;
using CapaLogica.CL.UtilidadesGenerales;


namespace CapaLogica.CL.Blog
{
    public class GestorBlog
    {
        public static String registrarBlog(int pidUsuario, String pnombre)
        {

            try
            {
                Cl_Blog objBlog = new Cl_Blog(pidUsuario, pnombre);
                BlogPersistente _BlogPersist = new BlogPersistente();

                _BlogPersist.registrarBlog(objBlog, 156);

                return "El blog se ha creado con éxito"; ;


            }
            catch (Exception ex)
            {

                return ex.Message;
            }
        }


        /// <summary>
        /// Método de la clase encargada de eliminar una nueva Carrera a la DB 
        /// </summary>
        /// <param name="pcodigoCurso">Codigo de la Carrera, tipo String</param>
        /// <param name="pnombre">Nombre de la Carrera, tipo String</param>
        /// <param name="pdescripcion">Descripcion de la carrera, tipo String</param>
        /// <param name="pestado">Estado de la carrera, tipo Byte</param>
        /// <remarks></remarks>
        public static String eliminarBlog(int pidUsuario)
        {
   
            try
            {
                bool existe;
                String msj;

                BlogPersistente _BlogPersist = new BlogPersistente();

                existe = _BlogPersist.buscarBlog(pidUsuario);


                if (existe)
                {
                    msj = _BlogPersist.eliminarBlog(pidUsuario, 156);
                    return msj;
                }
                else
                {
                    msj = "No existe el blog del usuario seleccionado, por lo tanto no se puede eliminar";
                }
                
                return msj;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }

        }





        public static String activarBlog(int pidUsuario)
        {
            String msj;
            try
            {
                BlogPersistente _BlogPersist = new BlogPersistente();

                msj = _BlogPersist.activarBlog(pidUsuario, Session.Id);

                return msj;
                
            }
            catch (Exception ex)
            {
                return ex.Message;
            }

        }


        


        /// <summary>
        /// Método de la clase encargada de eliminar una nueva Carrera a la DB 
        /// </summary>
        /// <param name="pcodigoCurso">Codigo de la Carrera, tipo String</param>
        /// <param name="pnombre">Nombre de la Carrera, tipo String</param>
        /// <param name="pdescripcion">Descripcion de la carrera, tipo String</param>
        /// <param name="pestado">Estado de la carrera, tipo Byte</param>
        /// <remarks></remarks>
        public static String desactivarBlog(int pidUsuario)
        {
            String msj;
            try
            {
                BlogPersistente _BlogPersist = new BlogPersistente();

                msj = _BlogPersist.desactivarBlog(pidUsuario, Session.Id, null);

                return msj;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }

        }


       


        public static int eliminarComentarioEntrada(int pidEntrada)
        {
            try
            {
                BlogPersistente _BlogPersist = new BlogPersistente();
                _BlogPersist.eliminarComentarioEntrada(pidEntrada, Session.Id);
                return 1;
            }
            catch (Exception ex)
            {
                return 0;
                throw ex;
            }
        }

        public static int eliminarEntradaBlog(int pidEntrada)
        {
            try
            {
                BlogPersistente _BlogPersist = new BlogPersistente();
                _BlogPersist.eliminarEntradaBlog(pidEntrada, Session.Id);
                return 1;
            }
            catch (Exception ex)
            {
                return 0;
                throw ex;
            }
        }

        public static bool denunciarBlog(int pidBlog)
        {
            try
            {
                int id = Session.Id;
                BlogPersistente _BlogPersist = new BlogPersistente();
                _BlogPersist.denunciarBlog(pidBlog, id);
                return true;
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }




        
        public static List<Informacion> listarCursosDeCarrera(int pIdCarrera)
        {
            try
            {
                CursoPersistente persistente = new CursoPersistente();
                List<Cl_Curso> cursos = persistente.buscarCursosDeCarrera(pIdCarrera);
                List<Informacion> datosCursos = new List<Informacion>();

                if (cursos.Count == 0)
                {
                    throw new Exception("No hay cursos registrados para esa carrera.");
                }

                foreach (Cl_Curso temp in cursos)
                {
                    EsCurso curso = new EsCurso(temp.id + "", temp.codigoCurso, temp.nombre);
                    datosCursos.Add(curso);
                }

                return datosCursos;
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }


        
        public static Dictionary<String, Object> obtenerBlogUsuario(int pIdusuario)
        {
            try
            {
                 BlogPersistente persistente = new BlogPersistente();
                EsBlog blog = persistente.obtenerBlogUsuario(pIdusuario);

                
                Dictionary<String, Object> datosBlog = new Dictionary<string, object>();

                datosBlog.Add("id", blog.Id);
                datosBlog.Add("nombreUsuario", blog.NombrePersona);
                datosBlog.Add("idUsuario", blog.IdUsuario);
                datosBlog.Add("estado", blog.Estado);
                datosBlog.Add("bloqueado", blog.Bloqueado);
                datosBlog.Add("rol", blog.Rol);
                datosBlog.Add("cantEntradas", blog.CantidadEntradas);


                return datosBlog;
            }
            catch (Exception ex)
            {
                
                throw ex;
            }
            

            

           
        }


    }
}
